/*
 * bjm.h
 *
 *  Created on: Jan 12, 2014
 *      Author: Benjamin Groeber, Julian Sanin, Matthaeus Ranigler
 */

#ifndef BJM_H_
#define BJM_H_

#include "symboltable.h"

typedef struct Data {
	data_type_t type;
	data_value_t value;
} data_t;

// Free up all used memory and exit program with status code.
void quit(int status);

void setValue(char *symbol, int scopeLevel, data_t data);
data_t getValue(char *symbol, int scopeLevel);

void printValue(data_t data);

data_t increment(data_t data);
data_t decrement(data_t data);
data_t add(data_t left, data_t right);
data_t sub(data_t left, data_t right);
data_t mul(data_t left, data_t right);
data_t divide(data_t left, data_t right);
data_t factorial(data_t value);

data_t lessThan(data_t left, data_t right);
data_t greaterThan(data_t left, data_t right);
data_t greaterThanEqual(data_t left, data_t right);
data_t lessThanEqual(data_t left, data_t right);
data_t notEqual(data_t left, data_t right);
data_t equal(data_t left, data_t right);

data_t lAnd(data_t left, data_t right);
data_t lOr(data_t left, data_t right);

#endif /* BJM_H_ */
